import axios from 'axios'
import qs from 'qs'
/**
 * axios的传参方式：
 * 1.url 传参 一般用于Get和Delete 实现方式：config.params={JSON}
 * 2.body传参 实现方式：config.data = {JSON}，且请求头为：headers: { 'Content-Type': 'application/json;charset=UTF-8' }
 * 3.表单传参 实现方式：config.data = qs.stringify({JSON})，且请求头为：且请求头为：headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' }
 */
// axios实例
const $http = axios.create({
        baseURL: 'http://localhost:8080/',
        timeout: 60000,
        //headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' }
        //发送post请求时，请求体数据以key/value键值对的方式
        // headers: { 'Content-Type':'application/json;charset=UTF-8' }
        //发送post请求时，请求体数据以json格式
    })
    // 请求拦截器
$http.interceptors.request.use(
    (config) => {
        // 追加时间戳，防止GET请求缓存
        if (config.method.toUpperCase() === 'GET') {
            config.params = {...config.params, token: localStorage.getItem("token"), t: new Date().getTime() }
        }

        if (Object.values(config.headers).includes('application/x-www-form-urlencoded')) {
            config.data.token = localStorage.getItem("token")
            config.data = qs.stringify(config.data)
        }
        return config
    },
    error => {
        return Promise.reject(error)
    }
)

// 响应拦截器
$http.interceptors.response.use(
    response => {
        const res = response.data
        return res
    },
    error => {
        return Promise.reject(error)
    }
)

// 导出 axios 实例
export default $http